[アップデート] VPC に関連付けられたプライベートホストゾーンを一覧表示できるようになりました
先日のアップデートで VPC に関連付けられたプライベートホストゾーンを一覧表示できるようになりました。
「・・・ふーん。」
という声が聴こえてきそうですが、めっちゃ重要なアップデートなんですよ!ということを紹介していきたいと思います。
何がうれしいのか
VPC を指定して関連付けられたプライベートホストゾーンを確認できる
従来、プライベートホストゾーンにどの VPC が関連付いているかを get-hosted-zone
を使って確認することは出来ました。
$ aws route53 get-hosted-zone --id Z2X1XA0PM2BA6I HostedZone: CallerReference: ou6c3vxfobzj7djogxwimxkt3vzsdsaz-joohqh01 Config: Comment: Created by Route 53 Auto Naming PrivateZone: true Id: /hostedzone/Z2X1XA0PM2BA6I LinkedService: Description: arn:aws:servicediscovery:ap-northeast-1:XXXXXXXXXXXX:namespace/ns-5hjrx5hb6hwv7o2q ServicePrincipal: servicediscovery.amazonaws.com Name: local. ResourceRecordSetCount: 2 VPCs: - VPCId: vpc-010be4739e500d319 VPCRegion: ap-northeast-1
数が少なければ get-hosted-zone
でも十分かもしれませんが、たくさんのプライベートホストゾーンを関連付けているときプライベートホストゾーンを起点に調べていくのは大変ですよね。
今回のアップデートで、プライベートホストゾーンの関連付けを VPC を起点に確認できるようになったのは 1 つ嬉しいポイントです。
が、本命はそこじゃない!
私もこのアップデートを見たとき「ふーん、まぁ get-hosted-zone で関連付いてる VPC は確認できるけど、VPC から引っ張れたら、それはそれで便利かもねー。」ぐらいに考えていました。
クロスアカウントのプライベートホストゾーンの関連付けを確認できる
For example, you can now easily identify all Private Hosted Zones associated with your VPC, even if those Private Hosted Zones were created by other AWS accounts.
このアップデートがどんな役に立つのかをいろいろ調べたところ、重要なのはココだということに辿りつきました。
みなさんご存知だったでしょうか。これまでクロスアカウントでプライベートホストゾーンの関連付けを行ったあと、関連付けを行ったアカウント側から、その関連付けを調べる術がほぼ無かったという事実を。
「え、嘘でしょ?」
と思いましたが get-hosted-zone
や list-hosted-zones
や list-hosted-zones-by-name
で確認できるのは、自アカウントがオーナーのホストゾーンのみです。もちろん AWS 管理コンソールでも確認できません。
以下のような構成のときに、アカウント A の VPC に関連付いているプライベートホストゾーンを確認できるのは、これまでアカウント B だけだったんです。
一度関連付けたプライベートを解除するには、ホストゾーン ID が必要になりますが、それを知る術がこれまでほぼ無かったということですね。「ほぼ」と表現しているのは、もし CloudTrail を取得しているならば、関連付け時の associate-vpc-with-hosted-zone
のログにホストゾーン ID は記録されます。
ただ、何年もあとにその CloudTrail ログを探しだす自信ありますか?最終的に見つけられなくても、AWS サポートに問い合わせて何とかなるとは思いますが。。
さらに怖いのは、悪意のある従業員によってこっそりと意図しないプライベートホストゾーン ID が仕込まれてるときです。アカウント A からクロスアカウントのプライベートホストゾーンの関連付けが確認できないということは、associate-vpc-with-hosted-zone
時の CloudTrail を見逃した、または取得していなかった場合、アカウント A 側から悪意のあるプライベートホストゾーンを参照していることに気づく術がない、ということです。
いま、データを送ってる宛先は本当に正しいホストゾーンによって名前解決がされた相手でしょうか?
という不安を拭い去ってくれるのが、今回のアップデートですね!
いかがでしょう?めっちゃ重要なアップデートだということが伝わったでしょうか。
やってみる
では、さくっと確認していきましょう。
事前準備
上図のとおりアカウント A に関連付けを行う VPC と、アカウント B にクロスアカウントで関連付けたいプライベートホストゾーン exsample.com
を作成しました。
クロスアカウントのホストゾーン関連付け
クロスアカウントでのホストゾーン関連付けは AWS コンソールでは行うことが出来ないので、AWS CLI を使用します。まず、アカウント B から アカウント A の VPC に対して、関連付けを承認する create-vpc-association-authorization
を行います。
$ aws route53 create-vpc-association-authorization \ --hosted-zone-id Z07647113DMUBACMFUTL --vpc VPCRegion=ap-northeast-1,VPCId=vpc-010be4739e500d319 HostedZoneId: Z07647113DMUBACMFUTL VPC: VPCId: vpc-010be4739e500d319 VPCRegion: ap-northeast-1
つぎに、アカウト A からホストゾーンへの関連付け associate-vpc-with-hosted-zone
を行います。
$ aws route53 associate-vpc-with-hosted-zone \ --hosted-zone-id Z07647113DMUBACMFUTL \ --vpc VPCRegion=ap-northeast-1,VPCId=vpc-010be4739e500d319 ChangeInfo: Comment: '' Id: /change/C00153961G3XEO25VLGL8 Status: PENDING SubmittedAt: '2020-06-19T20:50:11.236000+00:00'
これでクロスアカウントのプライベートホストゾーン関連付けは完了です。アカウント B 側では AWS コンソールからでもアカウト A の VPC vpc-010be4739e500d319
か関連付いていることは確認できます。
ちなみに関連付け時の CloudTrail は VPC の所属リージョンに関係なく、US East (N.Virginjia) us-east-1
の CloudTrail に出力されます。アカウント A の CloudTrail を確認すると、以下のように hostedZoneId
が記録されています。
{ "eventVersion": "1.05", "userIdentity": { "type": "AssumedRole", "principalId": "AROAIXXXXXXXXXXXXXXXX:1234500000000000000", "arn": "arn:aws:sts::XXXXXXXXXXXX:assumed-role/cm-marumo.atsushi/1234500000000000000", "accountId": "XXXXXXXXXXXX:assumed", "accessKeyId": "XXXXXXXXXXXXXXXXXXXX", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROAIXXXXXXXXXXXXXXXX", "arn": "arn:aws:iam::XXXXXXXXXXXX:role/cm-marumo.atsushi", "accountId": "XXXXXXXXXXXX", "userName": "cm-marumo.atsushi" }, "webIdFederationData": {}, "attributes": { "mfaAuthenticated": "false", "creationDate": "2020-06-19T20:47:17Z" } } }, "eventTime": "2020-06-19T20:50:11Z", "eventSource": "route53.amazonaws.com", "eventName": "AssociateVPCWithHostedZone", "awsRegion": "us-east-1", "sourceIPAddress": "101.143.209.114", "userAgent": "aws-cli/2.0.11 Python/3.7.4 Darwin/19.5.0 botocore/2.0.0dev15", "requestParameters": { "hostedZoneId": "Z07647113DMUBACMFUTL", "vPC": { "vPCRegion": "ap-northeast-1", "vPCId": "vpc-010be4739e500d319" } }, "responseElements": { "changeInfo": { "id": "/change/C00153961G3XEO25VLGL8", "status": "PENDING", "submittedAt": "Jun 19, 2020 8:50:11 PM", "comment": "" } }, "requestID": "d4830005-6dcd-42cf-9478-d3b53f6f5e99", "eventID": "a4794681-dfc8-49e3-9b59-fd8ae1242cdd", "eventType": "AwsApiCall", "apiVersion": "2013-04-01", "recipientAccountId": "XXXXXXXXXXXX" }
確認
それでは今回のアップデートで追加された list-hosted-zones-by-vpc
コマンドを確認しましょう。
新しいコマンドですので AWS CLI は最新にアップデートしました。検証は以下の AWS CLI バージョンで行っています。
$ aws --version aws-cli/2.0.24 Python/3.7.4 Darwin/19.5.0 botocore/2.0.0dev28
list-hosted-zones-by-vpc
のオプションに対象の VPC ID および、リージョンを指定します。
$ aws route53 list-hosted-zones-by-vpc \ --vpc-id vpc-010be4739e500d319 \ --vpc-region ap-northeast-1 HostedZoneSummaries: - HostedZoneId: Z07647113DMUBACMFUTL Name: exsample.com. Owner: OwningAccount: 'XXXXXXXXXXXX' MaxItems: '100'
ホストゾーン ID と Name が確認できましたね。どのアカウントがプライベートホストゾーンのオーナーであるかも表示されており、以前よりも格段に確認しやすくなりましたね!
検証は以上です。
さいごに
今回のアップデートの初見は地味だなー、と思っていましたが「何のためにこの地味なアップデート出したんだろう…」と、いろいろ考えながら調べていくと、めちゃめちゃ重要やないかい!ということが判ったのでシェアしました。
意図しないクロスアカウント・プライベートホストゾーンの関連付けについて少し触れましたが、これはセキュリティの観点でも重大な穴になりかねないポイントなので、別記事として取り上げたいと思ってます。
まずは一度、list-hosted-zones-by-vpc
をお試しください。知らないプライベートホストゾーンが設定されてはいませんか?
以上!大阪オフィスの丸毛(@marumo1981)でした!